اوراکل در نسخه 23c قابلیتی به نام JSON Relational Duality View را ارائه کرده است که می توان از طریق آن به طور همزمان از(بسیاری از) مزیتهای Relational data model و JSON data model بهرمند شد.
می دانیم که انتخاب هر کدام از این دیتامدلها می تواند بر حسب شرایط، مزایا و معایبی را به همراه داشته باشد. به طور مثال در مدل Relational می توان از مزیتهایی نظیر «جلوگیری از Data duplication، نرمالسازی، consistency» و … بهره گرفت و از طرف دیگر «خوانایی، سادگی، خود توصیفی، hierarchical document» نمونه هایی از مزیتهای JSON هستند.
بر اساس قابلیت JSON Relational Duality View، دیتا در جداول به صورت relational ذخیره می شوند و با ایجاد یک Duality View بر روی جداول رابطه ای، امکان دسترسی و دستکاری(Delete، Insert، Update) دیتا به صورت JSON هم به وجود خواهد آمد و Duality Viewها بر خلاف Viewهای معمولی، امکان write را بر روی جداول رابطه ای فراهم می کنند(حتی در حالت Complex View).
در زمان استفاده از این قابلیت، با توجه به ذخیره شدن اطلاعات در جداول رابطه ای، دستورات SQLای متعارف برای اجرای عملیات DML کاملا معتبر هستند و در کنار آن Developer این انتخاب را دارد تا با استفاده از Duality Viewها عملیات DML را با فرمت JSON انجام دهد که این مسئله mapping راحت تر بین Application Object و Relational Table را به همراه دارد و در بعضی از موارد می تواند نیاز به convert دیتا به فرمت JSON و یا برعکس را از بین ببرد.
در ادامه با ایجاد دو جدول book_tbl و author_tbl سعی خواهیم کرد نحوه کار با JSON Relational Duality View را شرح دهیم:
SQL> create table book_tbl(
ID number primary key,
title varchar2(100),
total_pages n
برچسب: نویسنده: خنجی تاريخ: سه شنبه 28 شهريور 1402 ساعت: 15:44
برچسب: نویسنده: خنجی تاريخ: جمعه 24 شهريور 1402 ساعت: 20:09
برچسب: نویسنده: خنجی تاريخ: چهارشنبه 15 شهريور 1402 ساعت: 3:21
برچسب: نویسنده: خنجی تاريخ: شنبه 4 شهريور 1402 ساعت: 8:30
برچسب: نویسنده: خنجی تاريخ: شنبه 4 شهريور 1402 ساعت: 8:30
در صورتی که دو کاربر قصد ویرایش یک رکورد را داشته باشند، کاربری که دیرتر دستور update را اجرا کرده Block خواهد شد و تا زمانی که کاربر اول(کاربری که زودتر رکورد را در اختیار گرفته) به تراکنش خاتمه ندهد، کاربر دوم در حالت Block باقی خواهد ماند.
--session 1:
SQL> select sid from v$mystat where rownum=1;
SID
----------
2190
SQL> update USEF.TBL1 set id=1;
1 row updated
--session 2:
SQL> select sid from v$mystat where rownum=1;
SID
----------
944
SQL> update USEF.TBL1 set id=1;
Executing…
بلاک شدن session دوم را می توانیم از طریق دستور زیر ببینیم:
SQL> select SID,ID1,ID2,LMODE,block,request from v$lock where type='TX';
SID ID1 ID2 LMODE BLOCK REQUEST
---------- ---------- ---------- ---------- ---------- ----------
944 458766 2511 0 0 6
2190 458766 2511 6 1 0
ممکن است کاربر دوم که تراکنشش در حالت انتظار قرار دارد، برای ما اولویت بیشتری داشته باشد. در این حالت چه راهکاری وجود دارد؟
اوراکل در نسخه 23c با ارائه چند پارامتر این مسئله را قابل کنترل کرده است و این امکان را فراهم کرده تا اگر تراکنشهای با اولویت پایین، سد راه تراکنشهای با اولویت بالا شوند، به صورت خودکار و با گذراندن زمان مشخصی، تراکنشهای با اولویت کمتر rollback شوند.
پارامترهای مربوط به قابلیت Automatic transaction rollback را در قسمت زیر مشاهده می کنید:
txn_priority string HIGH
txn_auto_rollback_mode
برچسب: نویسنده: خنجی تاريخ: شنبه 4 شهريور 1402 ساعت: 8:30